package pe.edu.upc.dsd.debuggers.pedido.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.log4j.Logger;

import pe.edu.upc.dsd.debuggers.pedido.model.service.PedidoService;
import pe.edu.upc.dsd.debuggers.pedido.model.service.PedidoServiceImpl;
import pe.edu.upc.dsd.debuggers.pedido.model.vo.DetallePedido;
import pe.edu.upc.dsd.debuggers.pedido.model.vo.Pedido;

/**
 * Servlet implementation class PedidoController
 */
public class PedidoController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	private final static String ESTADO_INGRESADO = "I";
	private Logger log = Logger.getLogger(PedidoController.class); 
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PedidoController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 doPost( request, response) ;
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String metodo = request.getParameter("method");
		
		if("verDetalle".equals(metodo)){
			listarDetalle(request, response);
		}else{
			listarPedidos(request, response);
		}
		
	}

	private void listarDetalle(HttpServletRequest request,
			HttpServletResponse response) {
		String codPedido = request.getParameter("codPed");
		PedidoService pedidoService = new PedidoServiceImpl();
		try {
			
			List<DetallePedido> detallePedidos = pedidoService.buscarDetPedidoPorId(codPedido);
			request.setAttribute("listaDetallePedido", detallePedidos);
		
			request.getRequestDispatcher("site/DetallePedidosCliente.jsp").forward(request, response);
		} catch (ServletException e) {
			log.error(e.getMessage());
			e.printStackTrace();
		} catch (IOException e) {
			log.error(e.getMessage());
			e.printStackTrace();
		}
		
	}

	private void listarPedidos(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		try{
			

		String codCliente = request.getParameter("txtCodClienteSession");
		String codPedido = request.getParameter("txtCodPedido");
		String fechaIni = request.getParameter("txtFechaIni");
		String fechaFin = request.getParameter("txtFechaFin");
		String estado = request.getParameter("cboEstado");
		log.info(codCliente+" "+codPedido+" "+fechaIni+" "+fechaFin+" "+estado);
		
		PedidoService pedidoService = new PedidoServiceImpl();
		
		Pedido pedbuscado = new Pedido();
		pedbuscado.setCodigo(codPedido);
		pedbuscado.setEstado(estado);
		pedbuscado.setFecha(fechaIni == null ? "" : fechaIni);
		pedbuscado.setFechaEntrega(fechaFin == null ? "" : fechaFin);
		System.out.println("codig: "+pedbuscado.getCodigo()+" fecha: "+pedbuscado.getFecha()+" "+pedbuscado.getEstado());
		System.out.println("antes de consultar");
		List<Pedido> listaPedidos = pedidoService.buscarPedidosPorCliente(codCliente, pedbuscado);
		formatListaPedidos(listaPedidos);
		System.out.println("antes de enviar la lista");
		request.setAttribute("listaPedidosCliente", listaPedidos);
		
		request.getRequestDispatcher("site/EstadoPedidosCliente.jsp").forward(request, response);
		
		}catch (Exception e){
			  request.setAttribute("error", e.getMessage());
			  System.out.println("no realiza el pedido");
			  request.getRequestDispatcher("site/error.jsp").forward(request,response);
			  e.printStackTrace();
          return;

		}
	}

	private void formatListaPedidos(List<Pedido> listaPedidos) {
		if(listaPedidos != null){
			for (Pedido pedido : listaPedidos) {
				if(pedido.getEstado() != null && pedido.getEstado().equals(ESTADO_INGRESADO)){
					pedido.setEstado("Ingresado");
				}
				if(pedido.getMonto() != null && pedido.getMonto().trim().equals("") != true ){
					pedido.setMonto("S/. "+pedido.getMonto() ); 
				}
			}
		}
		
	}

}
